#include <sys/mman.h> 
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> 
#include <stdio.h> 

//这里是硬编址的， 可以通过ioctl 或者proc来实现的。
#define PAGE_SIZE (4*1024)
// #define PAGE_OFFSET        0xc0000000
// #define KERNEL_VIRT_ADDR   0xcf9e5000 
// #define PAGE_OFFSET        0xc0000000
// #define KERNEL_VIRT_ADDR   0x5cf91000

int main() 
{ 
    char *buf; 
    int fd; 
    unsigned long phy_addr; 

    fd=open("/dev/mem",O_RDWR); 
    if(fd == -1)
        perror("open");
//     phy_addr=KERNEL_VIRT_ADDR - PAGE_OFFSET; 
    phy_addr= 0x57110000;

    buf=mmap(0, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, phy_addr); 
    if(buf == MAP_FAILED)
	{
        perror("mmap");
		goto clean_exit;
	}
    puts(buf);//打印共享内存的内容

    munmap(buf,PAGE_SIZE); 

clean_exit:
    close(fd); 
    return 0; 
} 
